home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
ashe-1.1
/
xfile.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-15
|
67KB
|
2,025 lines
/*
*
*
* xfile.c - (c) 1994 Copyright by John R. Punin
*
* ASHE
*
* This file has the routines to create the menus and the
*
* Options of the File and Edit Menu
*
* John R. Punin Feb - 26 - 1994
*
*/
#include "xhtml.h"
#include "xfile.h"
#include "xheader.h"
#include "xstyles.h"
#include "xviewer.h"
#include "xform.h"
extern MenuItem form_menu[];
/*
NAME : CreateMenuBar
PARAMETERS : Widget parent
Parent of the Widget Menubar in this case main_widget
RETURN : Widget Menubar
DESCRIPTION : This function creates the menubar widget at the top
of the main window and also creates each item of
the menus.
Menus are : File, Edit, HTML, Style, Lists and Forms
File Items : New, Open, Save, Insert and Quit
Edit Items : Cut, Copy, Paste, Delete and Undo
HTML Items : Title, Header, Paragraph, Link, Reference
and Image
Style Items : Code, Cyte, Blockquote, Address,
Bold, Italic and Underline
Lists Items : Definition, Term,
Unordered, Ordered and Item
*/
Widget
CreateMenuBar(Widget parent,HTMLED *he)
{
XmString file,open,open_acc,save,save_acc,quit,quit_acc,save_as,
insert,insert_acc,new,new_acc,frame,close_frame,prnt,export,
frame_acc,close_frame_acc,save_as_acc,prnt_acc,
edit,cut,copy,clears,paste,undos,hor_rule,
cut_acc,copy_acc,clear_acc,paste_acc,undo_acc,fonts,
title,title_acc,address,address_acc,
paragraph,parag_acc,comments,document,line_break,
header,header_acc,help,html,reload,reload_acc,
linker,linker_acc,reference,refer_acc,
figure,figure_acc,pre,pre_acc,
comments_acc,hor_rule_acc,
styles,code,cite,block,bold,italic,under,
ttwriter,emphasis,strong,characters,
code_acc,cite_acc,block_acc,bold_acc,italic_acc,under_acc,
emphasis_acc,strong_acc,ttwriter_acc,
lists,definition,term,unorder,order,item,
definition_acc,term_acc,unorder_acc,order_acc,item_acc;
XmString html_one,head_two,body_three;
XmString html_one_acc,head_two_acc,body_three_acc;
XmString dummy_acc=XmStringCreateSimple("");
Widget button_doc,menu_fonts,button_fonts;
Widget menubar,Help,menu_doc,menu_file,menu_html;
Widget editwidget;
/* Create a simple MenuBar that contains the following items */
file = XmStringCreateSimple("File");
edit = XmStringCreateSimple("Edit");
html = XmStringCreateSimple("HTML");
styles = XmStringCreateSimple("Styles");
lists =XmStringCreateSimple("Lists");
help = XmStringCreateSimple("Help");
characters= XmStringCreateSimple("Characters");
menubar = XmVaCreateSimpleMenuBar(parent,"menubar",
XmVaCASCADEBUTTON,file,'F',
XmVaCASCADEBUTTON,edit,'E',
XmVaCASCADEBUTTON,html,'M',
XmVaCASCADEBUTTON,styles,'y',
XmVaCASCADEBUTTON,lists,'L',
XmVaCASCADEBUTTON,characters,'\0',
XmVaCASCADEBUTTON,help,'H',
NULL);
XmStringFree(file);
XmStringFree(edit);
XmStringFree(help);
XmStringFree(styles);
XmStringFree(html);
XmStringFree(lists);
XmStringFree(characters);
/* tell the MenuBar that this is the help widget*/
Help = XtNameToWidget(menubar,"button_6");
XtVaSetValues(menubar,XmNmenuHelpWidget,Help,NULL);
BuildHelpMenu(menubar,he);
/* Create Form menu */
BuildPulldownMenu(menubar,"Forms",'r', False, form_menu,he);
/* First menu is the File menu */
open = XmStringCreateSimple("Open...");
open_acc = XmStringCreateSimple("Meta-o");
save = XmStringCreateSimple("Save");
save_acc = XmStringCreateSimple("Meta-s");
save_as = XmStringCreateSimple("Save as...");
save_as_acc = XmStringCreateSimple("Meta-a");
insert = XmStringCreateSimple("Insert...");
insert_acc = XmStringCreateSimple("Meta-I");
new = XmStringCreateSimple("New");
new_acc = XmStringCreateSimple("Meta-n");
export = XmStringCreateSimple("Export as...");
prnt = XmStringCreateSimple("Print...");
prnt_acc = XmStringCreateSimple("Meta-P");
reload = XmStringCreateSimple("Reload");
reload_acc = XmStringCreateSimple("Ctrl-r");
frame = XmStringCreateSimple("New Frame");
frame_acc = XmStringCreateSimple("");
close_frame = XmStringCreateSimple("Close Frame");
close_frame_acc = XmStringCreateSimple("Alt-f-c");
quit = XmStringCreateSimple("Quit...");
quit_acc = XmStringCreateSimple("Meta-q");
menu_file = XmVaCreateSimplePulldownMenu(menubar,"file_menu",
0,(XtCallbackProc)file_cb,
XmVaPUSHBUTTON, new, 'N',"Meta<Key>n",new_acc,
XmVaPUSHBUTTON, open, 'O',"Meta<Key>o" ,open_acc,
XmVaPUSHBUTTON, save, 'S', "Meta<Key>s",save_acc,
XmVaPUSHBUTTON, save_as, 'a',"Meta<Key>a",save_as_acc,
XmVaPUSHBUTTON, insert, 'I',"Meta Shift<Key>i",insert_acc,
XmVaPUSHBUTTON, export, 'E',"",dummy_acc,
XmVaPUSHBUTTON, reload, 'R',"Ctrl<Key>r",reload_acc,
XmVaPUSHBUTTON, prnt, 'P',"Meta Shift <Key>p",prnt_acc,
/* XmVaSEPARATOR,*/
XmVaPUSHBUTTON, frame,'F',"",dummy_acc,
XmVaPUSHBUTTON, close_frame,'C',"",dummy_acc,
/* XmVaSEPARATOR,*/
XmVaPUSHBUTTON, quit, 'Q',"Meta<Key>q",quit_acc,
XmNuserData,he,
NULL);
XmStringFree(export);
XmStringFree(new);XmStringFree(new_acc);
XmStringFree(open);XmStringFree(open_acc);
XmStringFree(save);XmStringFree(save_acc);
XmStringFree(insert);XmStringFree(insert_acc);
XmStringFree(quit);XmStringFree(quit_acc);
XmStringFree(save_as);XmStringFree(save_as_acc);
XmStringFree(frame);XmStringFree(frame_acc);
XmStringFree(prnt);XmStringFree(prnt_acc);
XmStringFree(reload);XmStringFree(reload_acc);
XmStringFree(close_frame);XmStringFree(close_frame_acc);
/* Second menu is the EDIT menu */
cut = XmStringCreateSimple("Cut");
cut_acc = XmStringCreateSimple("Ctrl-Meta-x");
copy = XmStringCreateSimple("Copy");
copy_acc = XmStringCreateSimple("Ctrl-Meta-c");
clears = XmStringCreateSimple("Delete");
clear_acc = XmStringCreateSimple("Ctrl-Meta-d");
paste = XmStringCreateSimple("Paste");
paste_acc = XmStringCreateSimple("Ctrl-Meta-p");
undos = XmStringCreateSimple("Undo");
undo_acc = XmStringCreateSimple("Ctrl-Meta-u");
fonts = XmStringCreateSimple("Change Fonts");
editwidget = XmVaCreateSimplePulldownMenu(menubar,"edit_menu",
1,(XtCallbackProc)cut_paste,
XmVaPUSHBUTTON, cut, 'C',"",dummy_acc,
XmVaPUSHBUTTON, copy, 'o',"",dummy_acc,
XmVaPUSHBUTTON, paste, 'P',"Ctrl Meta <Key>p",paste_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON, clears, 'D',"Ctrl Meta <Key>d",clear_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON, undos, 'U',"Ctrl Meta <Key>u",undo_acc,
/*XmVaSEPARATOR,*/
XmVaCASCADEBUTTON,fonts,'F',
XmNuserData,he,
NULL);
XtSetSensitive(XtNameToWidget(editwidget,"button_0"),False);
XtSetSensitive(XtNameToWidget(editwidget,"button_1"),False);
XtSetSensitive(XtNameToWidget(editwidget,"button_2"),False);
he->editwidget = editwidget;
XmStringFree(cut); XmStringFree(cut_acc);
XmStringFree(copy); XmStringFree(copy_acc);
XmStringFree(clears); XmStringFree(clear_acc);
XmStringFree(paste); XmStringFree(paste_acc);
XmStringFree(undos); XmStringFree(undo_acc);
button_fonts = NULL;
button_fonts = XtNameToWidget(editwidget,"button_5");
{
XmString tregular = XmStringCreateSimple("Times Regular");
XmString tsmall = XmStringCreateSimple("Times Small");
XmString tlarge = XmStringCreateSimple("Times Large");
XmString hregular = XmStringCreateSimple("Helvetica Regular");
XmString hsmall = XmStringCreateSimple("HelvelticaTimes Small");
XmString hlarge = XmStringCreateSimple("Helvetica Large");
XmString ncregular = XmStringCreateSimple("New Century Regular");
XmString ncsmall = XmStringCreateSimple("New Century Small");
XmString nclarge = XmStringCreateSimple("New Century Large");
XmString lregular = XmStringCreateSimple("Lucida Bright Regular");
XmString lsmall = XmStringCreateSimple("Lucida Bright Small");
XmString llarge = XmStringCreateSimple("Lucida Bright Large");
menu_fonts = XmVaCreateSimplePulldownMenu(editwidget,"menu_fonts",
5,/* button fonts */(XtCallbackProc)routines_fonts,
XmVaPUSHBUTTON,tregular, 'T',"",dummy_acc,
XmVaPUSHBUTTON,tsmall , 'S',"",dummy_acc,
XmVaPUSHBUTTON,tlarge, 'L',"",dummy_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON,hregular, 'H',"",dummy_acc,
XmVaPUSHBUTTON,hsmall , 'e',"",dummy_acc,
XmVaPUSHBUTTON,hlarge, 'v',"",dummy_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON,ncregular, 'N',"",dummy_acc,
XmVaPUSHBUTTON,ncsmall , 'w',"",dummy_acc,
XmVaPUSHBUTTON,nclarge, 'C',"",dummy_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON,lregular, 'L',"",dummy_acc,
XmVaPUSHBUTTON,lsmall , 'u',"",dummy_acc,
XmVaPUSHBUTTON,llarge, 'i',"",dummy_acc,
XmNuserData,he,
NULL);
if(button_fonts)
XtVaSetValues(button_fonts,XmNsubMenuId,menu_fonts,NULL);
XmStringFree(tsmall); XmStringFree(tregular);XmStringFree(tlarge);
XmStringFree(ncsmall); XmStringFree(ncregular);XmStringFree(nclarge);
XmStringFree(hsmall); XmStringFree(hregular);XmStringFree(hlarge);
XmStringFree(lsmall); XmStringFree(lregular);XmStringFree(llarge);
XtManageChild(menu_fonts);;
}
/* Third menu is the HTML menu */
title = XmStringCreateSimple("Title...");
title_acc = XmStringCreateSimple("Meta-t");
header = XmStringCreateSimple("Header...");
header_acc = XmStringCreateSimple("");
paragraph = XmStringCreateSimple("Paragraph");
parag_acc = XmStringCreateSimple("Meta-p");
line_break = XmStringCreateSimple("Line Break");
hor_rule= XmStringCreateSimple("Horiz. rule");
hor_rule_acc= XmStringCreateSimple("Meta-H");
comments= XmStringCreateSimple("Commentary...");
comments_acc= XmStringCreateSimple("Meta-C");
pre = XmStringCreateSimple("Preformat...");
pre_acc = XmStringCreateSimple("Meta-F");
linker =XmStringCreateSimple("Hyperlink...");
linker_acc = XmStringCreateSimple("Meta-L");
reference =XmStringCreateSimple("Reference...");
refer_acc = XmStringCreateSimple("Meta-N");
figure =XmStringCreateSimple("Image...");
figure_acc = XmStringCreateSimple("Meta-G");
document =XmStringCreateSimple("Document");
menu_html=XmVaCreateSimplePulldownMenu(menubar,"title_menu",2,
(XtCallbackProc)routines_html,
XmVaPUSHBUTTON, title, 'T',"Meta<Key>t",title_acc,
XmVaPUSHBUTTON, header, 'H',"",dummy_acc,
XmVaPUSHBUTTON, paragraph, 'P',"Meta<Key>p",parag_acc,
XmVaPUSHBUTTON, line_break, 'b',"",dummy_acc,
XmVaPUSHBUTTON, hor_rule, 'r',"Meta Shift<Key>h",hor_rule_acc,
XmVaPUSHBUTTON, pre, 'f',"Meta Shift<Key>f",pre_acc,
XmVaPUSHBUTTON, comments, 'c',"Meta Shift<Key>c",comments_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON, linker, 'l',"Meta Shift<Key>l",linker_acc,
XmVaPUSHBUTTON, reference, 'n',"Meta Shift<Key>n",refer_acc,
XmVaPUSHBUTTON, figure, 'I',"Meta Shift<Key>g",figure_acc,
XmVaCASCADEBUTTON, document, 'D',
XmNuserData,he,
NULL);
button_doc = NULL;
button_doc = XtNameToWidget(menu_html,"button_10");
XmStringFree(title);XmStringFree(title_acc);
XmStringFree(header);XmStringFree(header_acc);
XmStringFree(paragraph); XmStringFree(parag_acc);
XmStringFree(line_break);
XmStringFree(pre); XmStringFree(pre_acc);
XmStringFree(linker);XmStringFree(linker_acc);
XmStringFree(reference);XmStringFree(refer_acc);
XmStringFree(figure);XmStringFree(figure_acc);
XmStringFree(comments); XmStringFree(comments_acc); XmStringFree(document);
XmStringFree(hor_rule); XmStringFree(hor_rule_acc);
XtManageChild(menu_html);
/* create menu for document button */
html_one = XmStringCreateSimple("HTML...");
html_one_acc = XmStringCreateSimple("Alt-t-d-h");
head_two = XmStringCreateSimple("Head...");
head_two_acc = XmStringCreateSimple("Alt-t-d-e");
body_three = XmStringCreateSimple("Body...");
body_three_acc = XmStringCreateSimple("Alt-t-d-b");
menu_doc = XmVaCreateSimplePulldownMenu(menu_html,"menu_doc",
10,/* button document */(XtCallbackProc)routines_styles,
XmVaPUSHBUTTON,html_one , 'H',"",dummy_acc,
XmVaPUSHBUTTON,head_two, 'e',"",dummy_acc,
XmVaPUSHBUTTON, body_three, 'B',"",dummy_acc,
XmNuserData,he,
NULL);
if(button_doc)
XtVaSetValues(button_doc,XmNsubMenuId,menu_doc,NULL);
XmStringFree(html_one ); XmStringFree(head_two);XmStringFree(body_three);
XmStringFree(html_one_acc ); XmStringFree(head_two_acc);
XmStringFree(body_three_acc);
XtManageChild(menu_doc);
/* Fourth menu is the Style menu */
code = XmStringCreateSimple("Code...");
code_acc = XmStringCreateSimple("Alt-s-c");
cite = XmStringCreateSimple("Cite...");
cite_acc = XmStringCreateSimple("Alt-s-t");
block = XmStringCreateSimple("Blockquote...");
block_acc = XmStringCreateSimple("Alt-s-q");
address = XmStringCreateSimple("Address...");
address_acc = XmStringCreateSimple("Alt-s-a");
bold =XmStringCreateSimple("Bold...");
bold_acc = XmStringCreateSimple("Meta-b");
italic =XmStringCreateSimple("Italic...");
italic_acc = XmStringCreateSimple("Alt-s-i");
under =XmStringCreateSimple("Underline...");
under_acc = XmStringCreateSimple("Alt-s-u");
emphasis =XmStringCreateSimple("Emphasis...");
emphasis_acc =XmStringCreateSimple("Alt-s-e");
strong =XmStringCreateSimple("Strong...");
strong_acc =XmStringCreateSimple("Alt-s-s");
ttwriter=XmStringCreateSimple("Typewriter...");
ttwriter_acc=XmStringCreateSimple("Alt-s-y");
XmVaCreateSimplePulldownMenu(menubar,"style_menu",3,
(XtCallbackProc)routines_styles,
XmVaPUSHBUTTON, emphasis,'E',"",dummy_acc/*emphasis_acc*/,
XmVaPUSHBUTTON, strong, 'S', "",dummy_acc/*strong_acc*/,
XmVaPUSHBUTTON, code, 'C',"",dummy_acc/*code_acc*/,
XmVaPUSHBUTTON, cite, 't',"",dummy_acc/*cite_acc*/,
XmVaPUSHBUTTON, block, 'q',"",dummy_acc/*block_acc*/,
XmVaPUSHBUTTON, address, 'A',"",dummy_acc/*address_acc*/,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON, bold, 'B',"Meta<Key>b",bold_acc,
XmVaPUSHBUTTON, italic, 'I',"",dummy_acc/*italic_acc*/,
XmVaPUSHBUTTON, under, 'U',"",dummy_acc/*under_acc*/,
XmVaPUSHBUTTON, ttwriter, 'y',"",dummy_acc/*ttwriter_acc*/,
XmNuserData,he,
NULL);
XmStringFree(code);XmStringFree(code_acc);
XmStringFree(cite);XmStringFree(cite_acc);
XmStringFree(block); XmStringFree(block_acc);
XmStringFree(address); XmStringFree(address_acc);
XmStringFree(bold);XmStringFree(bold_acc);
XmStringFree(italic);XmStringFree(italic_acc);
XmStringFree(under);XmStringFree(under_acc);
XmStringFree(emphasis);XmStringFree(strong);
XmStringFree(emphasis_acc);XmStringFree(strong_acc);
XmStringFree(ttwriter); XmStringFree(ttwriter_acc);
/* Fifth menu is the Lists menu */
definition = XmStringCreateSimple("Definition");
definition_acc = XmStringCreateSimple("Meta-D");
term = XmStringCreateSimple("Term");
term_acc = XmStringCreateSimple("Meta-T");
unorder = XmStringCreateSimple("Unordered...");
unorder_acc = XmStringCreateSimple("Meta-U");
order = XmStringCreateSimple("Ordered...");
order_acc = XmStringCreateSimple("Meta-O");
item =XmStringCreateSimple("Item");
item_acc = XmStringCreateSimple("Meta-i");
XmVaCreateSimplePulldownMenu(menubar,"list_menu",4,
(XtCallbackProc)routines_lists,
XmVaPUSHBUTTON, definition, 'D',"Meta Shift<Key>d",definition_acc,
XmVaPUSHBUTTON, term, 'T', "Meta Shift<Key>t",term_acc,
/*XmVaSEPARATOR,*/
XmVaPUSHBUTTON, unorder, 'U',"Meta Shift<Key>u",unorder_acc,
XmVaPUSHBUTTON, order, 'O',"Meta Shift<Key>o",order_acc,
XmVaPUSHBUTTON, item, 'I',"Meta <Key>i",item_acc,
XmNuserData,he,
NULL);
XmStringFree(definition);XmStringFree(definition_acc);
XmStringFree(term);XmStringFree(term_acc);
XmStringFree(unorder); XmStringFree(unorder_acc);
XmStringFree(order); XmStringFree(order_acc);
XmStringFree(item);XmStringFree(item_acc);
/* Sixth menu is the Characters menu */
BuildCharactersMenu(menubar,he);
XmStringFree(dummy_acc);
XtManageChild(menubar);
return(menubar);
}
/*
NAME : file_cb
PARAMETERS : int item_no
Number of the item menu where this function was called for.
Other Parameters not used
RETURN : void
DESCRIPTION : This routine creates the FileSelectionDialog widget and
this is shared for the option open, save and insert.
*/
void
file_cb(Widget w, int item_no, XtPointer call_data)
{
Widget dialog = NULL;
XmString str=NULL, title=NULL;
XmString t=NULL;
HTMLED *he=NULL;
Widget parent = XtParent(w);
char *fname=NULL;
XtVaGetValues(parent,XmNuserData,&he,NULL);
he->user_data = (XtPointer)item_no;
if(strcmp(he->Name_File,"*scratch*"))
t = XmStringCreateSimple(he->Name_File);
if(item_no == EXIT_BUT)
{
Exit_ASHE(he->textarea);
return;
}
if(item_no == CLOSE_FRAME_BUT)
{
CloseFrame(w,he);
return;
}
if(item_no == NEW_FRAME_BUT)
{
fname=he->Name_File;
if(fname)
{
XtFree(he->href);
he->href = XtMalloc(strlen(fname)+1);
strcpy(he->href,fname);
}
CreateNewFrame(w,he);
return;
}
if(item_no == EXPORT_BUT)
{
Export_HTML(w,(XtPointer)he,NULL);
return;
}
if(item_no == RELOAD_BUT)
{
Reload_HTML(w,(XtPointer)he,NULL);
return;
}
if(item_no == PRINT_BUT)
{
PrintButtonCallBack(w,(XtPointer)he,NULL);
return;
}
if(item_no == NEW_BUT)
{
new_file(he);
return;
}
if(item_no == SAVE_BUT)
{
simple_save_file(w,he);
return;
}
if(item_no == OPEN_BUT && he->open_dialog)
dialog = he->open_dialog;
if(item_no == SAVE_AS_BUT && he->save_dialog)
dialog = he->save_dialog;
if(item_no == INSERT_BUT && he->insert_dialog)
dialog = he->insert_dialog;
if(dialog) {
if(t)
XtVaSetValues(dialog,
XmNtextString,t,NULL);
XtManageChild(dialog);
/* make sure that dialog is raised to top of window stack*/
XMapRaised(XtDisplay(dialog),XtWindow(XtParent(dialog)));
return;
}
dialog = XmCreateFileSelectionDialog(he->textarea,"Files",NULL,0);
XtAddCallback(dialog,XmNcancelCallback,(XtCallbackProc)XtUnmanageChild,NULL);
XtAddCallback(dialog,XmNokCallback,OkFileButtonCallback,(XtPointer)he);
if(item_no ==OPEN_BUT)
{
str = XmStringCreateSimple("Open");
title = XmStringCreateSimple("Open File");
he->open_dialog = dialog;
}
else if(item_no == SAVE_AS_BUT)
{
str = XmStringCreateSimple("Save");
title = XmStringCreateSimple("Save File");
he->save_dialog = dialog;
if(t)
XtVaSetValues(dialog,
XmNtextString,t,NULL);
}
else if(item_no== INSERT_BUT)
{
str = XmStringCreateSimple("Insert");
title = XmStringCreateSimple("Insert File");
he->insert_dialog = dialog;
}
XtVaSetValues(dialog,
XmNokLabelString,str,
XmNdialogTitle, title,
NULL);
XmStringFree(t);
XmStringFree(str);
XmStringFree(title);
XtManageChild(dialog);
}
/*
NAME : PrintButtonCallBack
PARAMETERS : Not used
RETURN : void
DESCRIPTION : This Routine creates the dialog widget to enter
the name of the printer
*/
void
PrintButtonCallBack(
Widget w,
XtPointer client_data, XtPointer call_data)
{
Widget dialog;
XmString title = XmStringCreateSimple("Printer Name :");
HTMLED *he = (HTMLED *)client_data;
dialog = XmCreatePromptDialog(he->textarea,"notice_printing",NULL,0);
XtVaSetValues(dialog,XmNselectionLabelString,title,NULL);
/* When the user choose a size of the header, call set_header */
XtAddCallback(dialog, XmNokCallback,(XtCallbackProc)printing,(XtPointer)he);
/* If the user selects cancel, just destroy the header dialog */
XtAddCallback(dialog, XmNcancelCallback,(XtCallbackProc)XtDestroyWidget,NULL);
/* Nor help neither text is available.... */
XtUnmanageChild(XmSelectionBoxGetChild(dialog,XmDIALOG_HELP_BUTTON));
XtManageChild(dialog);
}
/*
NAME : printing
PARAMETERS : XmSelectionBoxCallbackStruct *cbs
This parameter has the Name of the printer
RETURN : void
DESCRIPTION : Receive the name of the printer, verify if the
file exist and print the file in the printer
*/
void
printing(Widget w,XtPointer client_data,XmSelectionBoxCallbackStruct *cbs)
{
HTMLED *he = (HTMLED *)client_data;
char *value=NULL;
int len=0;
char *command=NULL;
if(XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&value))
len = strlen(value);
command = XtMalloc(len+20);
strcpy(command,"lpr ");
if(strlen(value)!=0)
{
strcat(command,"-P");
strcat(command,value);
strcat(command," ");
}
if(he->Name_File[0]!='\0')
{
strcat(command,he->Name_File);
system(command);
}
else
Set_label(he->text_output,"No File to Print");
XmProcessTraversal(he->textarea,XmTRAVERSE_CURRENT);
XtFree(command);
}
/*
NAME : new_file
PARAMETERS : void
RETURN : void
DESCRIPTION : Set the status of the Main window for a New File
*/
void
new_file(HTMLED *he)
{
char tstring[2];
tstring[0]='\0';
strcpy(he->Name_File,"*scratch*");
XmTextSetString(he->textarea,"\n");
HTMLSetText(he->html_text,tstring,NULL,NULL,0,NULL,NULL);
Set_label(he->title_output,"");
Set_label(he->text_output,"ASHE (A Simple HTML Editor)");
Set_label(he->file_output,"*scratch*");
}
/*
NAME : read_file
PARAMETERS : char *text
Name of the file
RETURN : integer error
returns 1 if there are some error messages
DESCRIPTION : Read the file and put it in the Text Widget
Generates an error if the file does not exist
or could not read the entire file.
*/
int
read_file(char *text,HTMLED *he)
{
int i=0;
int fd; /* File Descriptor of the file */
struct stat statbuf; /* information on a file */
long n,file_length; /* Length of a file */
char *mybuf=NULL; /* Buffer */
char buf[BUFSIZ];
char *title=NULL;
int ask;
char oldlen = (he->Name_File ? strlen(he->Name_File) : 0);
char *old_file = XtMalloc(oldlen+2);
if(he->Name_File) strcpy(old_file,he->Name_File);
if(he->modified_file)
{
char *question=XtMalloc(oldlen+100);
sprintf(question,
"File %s has been modified. \n Do you want to save it?",old_file);
if((ask = AskUser(he->textarea, question))==YES)
{
if(save_file_ok(he))
{
sprintf(buf,"This file %s can not be saved",he->Name_File);
Set_label(he->text_output,buf);
XtFree(question);
return 1;
}
}
else if(ask == CANCEL)
{
XtFree(question);
return 1;
}
XtFree(question);
}
he->Name_File[0]='\0';
strcpy(he->Name_File,text);
if(stat(he->Name_File, &statbuf) == 0)
file_length = statbuf.st_size;
else
file_length = BUFSIZ;
/* The name of the file is a directory ? */
if(he->Name_File)
{
if(S_ISDIR(statbuf.st_mode))
{
fprintf(stderr,"%s is a directory\n\n",he->Name_File);
sprintf(buf,"%s is a directory",he->Name_File);
Set_label(he->text_output,buf);
return 1;
}
}
/* Create the space for the file */
mybuf = (char *)XtMalloc((unsigned)file_length+1);
if (mybuf == NULL)
{
fprintf(stderr," File is too big \n");
sprintf(buf,"%s: XtMalloc(%ld) failed",text,file_length);
Set_label(he->text_output,buf);
return 1;
}
fprintf(stdout, "File :'%s'\n", he->Name_File);
/* Opening and Reading the file */
if((fd = open(he->Name_File,O_RDONLY,0)) == -1)
{
fprintf(stderr,"File %s does not exist\n\n",he->Name_File);
sprintf(buf,"File %s does not exist",he->Name_File);
Set_label(he->text_output,buf);
return 1;
}
while((n = read(fd, mybuf, file_length)) > 0)
{
if(n!=file_length)
sprintf(buf,"Warning: did not read entire file!");
else
sprintf(buf,"Loaded %ld bytes from %s",file_length,text);
i++;
if (i==2) printf("Reading the buffer again\n");
}
mybuf[file_length]=0; /* NULL-terminate */
XmTextSetString(he->textarea,mybuf);
HTMLSetText(he->html_text,mybuf,NULL,NULL,0,he->anchor_target,NULL);
if(he->toggle_mark_tag == True)
parsing_hightlight(mybuf,0,0,he);
title = get_title(he->html_text);
if(title!=NULL)
Set_label(he->title_output,title);
else
Set_label(he->title_output,"");
Set_label(he->text_output,buf);
Set_label(he->file_output,text);
he->modified_file = FALSE;
XtFree(mybuf);
/*XtFree(text); Bki */
XtFree(title);
close(fd);
return 0;
}
void
simple_save_file(Widget w,HTMLED *he)
{
if(strcmp(he->Name_File,"*scratch*"))
save_file_ok(he);
else
file_cb(w,SAVE_AS_BUT,NULL);
}
/*
NAME : save_file
PARAMETERS : char *filename
Name of the file
RETURN : integer error
returns 1 if there are some error messages
DESCRIPTION : Takes the string from the Text Widget and Save it in the
given file name
If the file does not exist, create a new file
*/
int
save_file(char *filename,HTMLED *he)
{
int fd;
int len=0;
if((fd = open(filename,O_RDONLY,0)) == -1)
{
strcpy(he->Name_File,filename);
close(fd);
return(save_file_ok(he));
}
else
{
len = strlen(filename);
close(fd);
he->warning = XtMalloc(len+50);
sprintf(he->warning,
"\"%s\" already exists\nDo you want to overwrite it?",filename);
warning_message(he->textarea,he);
}
return 0;
}
void
warning_message(Widget w,HTMLED *he)
{
static Widget dialog;
XmString text,ok_str,cancel_str;
char *msg = he->warning;
if(!dialog)
dialog = XmCreateWarningDialog(w,"warning",NULL,0);
text = XmStringCreateLtoR(msg,XmFONTLIST_DEFAULT_TAG);
ok_str = XmStringCreateLocalized("Yes");
cancel_str = XmStringCreateLocalized("No");
XtVaSetValues(dialog,
XmNmessageString,text,
XmNokLabelString,ok_str,
XmNcancelLabelString,cancel_str,
NULL);
XtAddCallback(dialog,XmNokCallback,(XtCallbackProc)ok_pushed,(XtPointer)he);
XmStringFree(text);
XmStringFree(ok_str);
XmStringFree(cancel_str);
XtFree(he->warning);
XtManageChild(dialog);
XtPopup(XtParent(dialog),XtGrabNone);
}
void
ok_pushed(Widget w, XtPointer client_data,XtPointer call_data)
{
char *filename;
HTMLED *he = (HTMLED *)client_data;
Widget text = XmFileSelectionBoxGetChild(he->save_dialog,XmDIALOG_TEXT);
filename = XmTextGetString(text);
strcpy(he->Name_File,filename);
XtFree(filename);
save_file_ok(he);
if(he->save_dialog)
XtUnmanageChild(he->save_dialog);
}
int
save_file_ok(HTMLED *he)
{
char *tstring=NULL; /* text string */
int fd,fdb;
int n;
int file_length;
char buf[BUFSIZ];
long len;
char *filename = he->Name_File;
char *fileback=NULL;
struct stat statbuf;
/* Create a Back up file */
if((fd = open(filename,O_RDONLY,0)) != -1)
{
fileback = XtMalloc(strlen(filename)+2);
sprintf(fileback,"%s~",filename);
if((fdb = creat(fileback,PERMS)) == -1)
{
perror("Can not save this file \n");
sprintf(buf,"Can't save to %s.",fileback);
Set_label(he->text_output,buf);
return 1;
}
if(stat(he->Name_File, &statbuf) == 0)
file_length = statbuf.st_size;
else
file_length = BUFSIZ;
tstring = XtMalloc(file_length +2);
while((n = read(fd, tstring, file_length)) > 0)
if(write(fdb, tstring, n) != n)
{
printf("File %s is not saved \n",fileback);
he->modified_file = TRUE;
}
he->modified_file = FALSE;
close(fdb);
close(fd);
XtFree(tstring);
XtFree(fileback);
}
/* Create the file if it is a new file and write the
content of the Text Window to the file */
if((fd = creat(filename,PERMS)) == -1)
{
perror("Can not save this file \n");
sprintf(buf,"Can't save to %s.",filename);
Set_label(he->text_output,buf);
return 1;
}
/* saving -- get text for Text widget... */
tstring = XmTextGetString(he->textarea);
len = XmTextGetLastPosition(he->textarea);
if(write(fd,tstring,len)!= len)
strcpy(buf,"Warning: did not write entire file!");
else
{
/* make sure a newline terminates file */
if(tstring[len-1]!='\n')
{
strcpy(buf,"\n");
++len; /* Bki */
write(fd,buf,1);
}
sprintf(buf,"saved %ld bytes to %s.",len, filename);
}
XtFree(tstring);
Set_label(he->text_output,buf);
Set_label(he->file_output,filename);
close(fd);
return 0;
}
/*
NAME : insert_file
PARAMETERS : char *text
Name of the file
RETURN : integer error
returns 1 if there are some error messages
DESCRIPTION : Read the file and insert it in the Text Widget in
the position where the cursor is.
Generates an error if the file does not exist
or could not read the entire file.
*/
int
insert_file(char *text,HTMLED *he)
{
int i=0;
int fd; /* File Descriptor of the file */
struct stat statbuf; /* information on a file */
long n,file_length; /* Length of a file */
char *mybuf; /* Buffer */
char buf[BUFSIZ];
char fname[MAXIPATH];
char *title;
XmTextPosition left,right;
fname[0]='\0';
/* Read the name of the file in the current directory or
full name of the file */
/* if(text[0]!='/')
{
strcpy(fname, Home);
strcat(fname,"/");
strcat(fname, text);
}
else */
strcpy(fname,text);
if(stat(fname, &statbuf) == 0)
file_length = statbuf.st_size;
else
file_length = BUFSIZ;
/* Create the space for the file */
mybuf = (char *)XtMalloc((unsigned)file_length);
if (mybuf == NULL)
{
fprintf(stderr," File is too big \n");
sprintf(buf,"%s: XtMalloc(%ld) failed",text,file_length);
Set_label(he->text_output,buf);
return 1;
}
fprintf(stdout, "You typed '%s'\n", fname);
/* Opening and Reading the file */
if((fd = open(fname,O_RDONLY,0)) == -1)
{
fprintf(stderr,"File %s does not exist\n\n",fname);
sprintf(buf,"File %s does not exist",fname);
Set_label(he->text_output,buf);
return 1;
}
while((n = read(fd, mybuf, file_length)) > 0)
{
if(n!=file_length)
sprintf(buf,"Warning: did not read entire file!");
else
sprintf(buf,"Loaded %ld bytes from %s",file_length,text);
i++;
if (i==2) printf("Reading the buffer again\n");
}
mybuf[file_length]=0; /* NULL-terminate */
left = XmTextGetInsertionPosition(he->textarea);
XmTextInsert(he->textarea,left,mybuf);
XtFree(mybuf);
mybuf= XmTextGetString(he->textarea);
HTMLSetText(he->html_text,mybuf,NULL,NULL,0,NULL,NULL);
title=remove_title(&left,&right,he);
if(left!=0)
Set_label(he->title_output,title);
Set_label(he->text_output,buf);
XtFree(mybuf);
/*XtFree(text);*/
XtFree(title);
close(fd);
return 0;
}
/*
NAME : OkFileButtonCallback
PARAMETERS : int save
Integer to know what dialog widget call this function.
RETURN : void
DESCRIPTION : This is a Callback function that is called when
the OK button is selected. It decides if the file
is going to be saved, opened or inserted.
*/
void
OkFileButtonCallback(
Widget w,
XtPointer client_data, XtPointer call_data)
{
HTMLED *he = (HTMLED *)client_data;
int save = (int)he->user_data;
XmFileSelectionBoxCallbackStruct *selection;
char *filename;
int flag;
/* The information about the selection is passed in call_data. */
selection = (XmFileSelectionBoxCallbackStruct *) call_data;
/* Read the file and show it in the Text Window */
if(!XmStringGetLtoR(selection->value,XmSTRING_DEFAULT_CHARSET,&filename))
return; /* must have been an internal error */
if(!*filename)
{
/*XtFree(filename);*/
XBell(XtDisplay(he->textarea),50);
Set_label(he->text_output,"Choose a file.");
return; /* nothing typed */
}
if(save == SAVE_AS_BUT)
flag = save_file(filename,he);
else if(save ==OPEN_BUT)
flag = read_file(filename,he);
else if(save == INSERT_BUT)
flag = insert_file(filename,he);
/* free all allocated space */
/*XtFree(filename);*/
if(!flag)
XtUnmanageChild(w);
}
/*
NAME : ClearButtonCallBack
PARAMETERS : Not used
RETURN : void
DESCRIPTION : Clear the text window
*/
void
ClearButtonCallBack(
Widget w,
XtPointer client_data,XtPointer call_data)
{
HTMLED *he = (HTMLED *)client_data;
char tstring[2];
if(he->text_cleared)
{
XtFree(he->text_cleared);
he->text_cleared = NULL;
}
he->text_cleared = XmTextGetString(he->textarea);
tstring[0]='\0';
he->last_command = CLEAR;
XmTextSetString(he->textarea, "");
HTMLSetText(he->html_text,tstring,NULL,NULL,0,NULL,NULL);
Set_label(he->title_output,"");
XmProcessTraversal(he->textarea,XmTRAVERSE_CURRENT);
}
/*
NAME : Set_label
PARAMETERS : Widget w
Label Widget to be modified its label
char *label
Name of the new label of the Widget
RETURN : void
DESCRIPTION : Set the label of a Label Widget
*/
void
Set_label(Widget w,char *label)
{
XmString str = XmStringCreateLtoR(label,XmSTRING_DEFAULT_CHARSET);
XmString str2=NULL,str3=NULL;
if(!strcmp(XtName(w),"title_out"))
{
str2 = XmStringCreateLtoR(" Document Title : ",XmSTRING_DEFAULT_CHARSET);
str3 = XmStringConcat(str2,str);
}
else if(!strcmp(XtName(w),"file_out"))
{
str2 = XmStringCreateLtoR("File Name : ",XmSTRING_DEFAULT_CHARSET);
str3 = XmStringConcat(str2,str);
}
else
str3 = XmStringCopy(str);
/* XmStringGetLtoR(str,XmSTRING_DEFAULT_CHARSET,&value1);
XmStringGetLtoR(str2,XmSTRING_DEFAULT_CHARSET,&value2);
XmStringGetLtoR(str3,XmSTRING_DEFAULT_CHARSET,&value3);
printf("3 values: %s\t%s\t%s\n",value1,value2,value3);
XtFree(value1);
XtFree(value2);
XtFree(value3);*/
XtVaSetValues(w,XmNlabelString,str3,NULL);
XmStringFree(str);
if(str2!=NULL)
XmStringFree(str2);
if(str3!=NULL)
XmStringFree(str3);
}
/*
NAME : cut_paste
PARAMETERS : int item_no
Item number of the Edit Menu where this function was called
RETURN : void
DESCRIPTION : Depending of the item_no, it decides to cut, copy, paste
delete or undo
*/
void
cut_paste(Widget w, int item_no)
{
HTMLED *he;
Boolean result = True;
static Boolean flag = True;
Widget parent = XtParent(w);
XtVaGetValues(parent,XmNuserData,&he,NULL);
switch(item_no) {
case 0:
result = XmTextCut(he->textarea,CurrentTime); break;
case 1:
result = XmTextCopy(he->textarea,CurrentTime); break;
case 2:
result = XmTextPaste(he->textarea); break;
case 3:
XmTextClearSelection(he->textarea,CurrentTime); break;
case 4:
create_undo(w,he);
}
if (result == False)
Set_label(he->text_output, "There is no selection");
else
{
if(flag==True)
{
XtSetSensitive(XtNameToWidget(XtParent(w),"button_2"),True);
flag = False;
}
Set_label(he->text_output, "");
}
}
/*
NAME : Setmenu
PARAMETERS : Not used
RETURN : void
DESCRIPTION :This function sets the items cut and copy to
be sensitive or not depending if there is
a selected text or not
*/
void
Setmenu(Widget w,HTMLED *he)
{
XmTextPosition left,right;
Boolean flag;
flag = XmTextGetSelectionPosition(he->textarea,&left,&right);
if((flag == True) && (left!=right))
{
XtSetSensitive(XtNameToWidget(he->editwidget,"button_0"),True);
XtSetSensitive(XtNameToWidget(he->editwidget,"button_1"),True);
}
else
{
XtSetSensitive(XtNameToWidget(he->editwidget,"button_0"),False);
XtSetSensitive(XtNameToWidget(he->editwidget,"button_1"),False);
}
}
/*
NAME : parsing_hightlight
PARAMETERS : char *text
String from the insertion point to the end of the text
XmTextPosition start
Insertion Point
int count
Number of characters that are inserted to the text
RETURN : void
DESCRIPTION : This routine update the underlining of all tags
from the insertion point to the end of the text
*/
void
parsing_hightlight(char *text,XmTextPosition start,int count,HTMLED *he)
{
int i;
int len=0;
XmTextPosition left=0,right=0,before=0;
if(text)
len = strlen(text);
right = len;
for(i=start;i<len;)
{
while(text[i]!='<')
{
i++;
if(text[i]=='>')
{
Set_label(he->text_output,"Overlapped HTML Tags");
}
if (i == len) break;
}
before = i;
left = i+count;
if(i==len) break;
while(text[i]!='>')
{
i++;
if(text[i]=='<')
{
Set_label(he->text_output,"Overlapped HTML Tags");
}
if (i == len) break;
}
right = i+count;
if(i== len) break;
XmTextSetHighlight(he->textarea,left,right,XmHIGHLIGHT_SECONDARY_SELECTED);
XmTextSetHighlight(he->textarea,before-1,left-1,XmHIGHLIGHT_NORMAL);
}
}
/*
NAME : Set_Underline_Tags
PARAMETERS : XmToggleButtonCallbackStruct *state
This gives the state of the toggle button mark tags
RETURN : void
DESCRIPTION :This is a Callback function that is called when
the toggle button mark_tags change the state.
If it is on, the document is parsed to underline
all tags.
*/
void
Set_Underline_Tags(Widget w,
XtPointer client_data,
XmToggleButtonCallbackStruct *state)
{
HTMLED *he = (HTMLED *)client_data;
char * text;
he->toggle_mark_tag = False;
if (state->set)
{
he->toggle_mark_tag = True;
text = XmTextGetString(he->textarea);
parsing_hightlight(text,0,0,he);
XtFree(text);
}
else
XmTextSetHighlight(he->textarea,0,XmTextGetLastPosition(he->textarea),
XmHIGHLIGHT_NORMAL);
XmProcessTraversal(he->textarea,XmTRAVERSE_CURRENT);
}
/*
AskUser() --- a generalized routine that asks the user a question
and return the Yes/No response
*/
int
AskUser(Widget parent, char *question)
{
Widget dialog;
XmString text, yes, no,cancel_str;
static int answer;
dialog = XmCreateQuestionDialog(parent, "dialog",NULL,0);
yes = XmStringCreateLocalized("Yes");
no = XmStringCreateLocalized("No");
cancel_str = XmStringCreateLocalized("Cancel");
XtVaSetValues(dialog,
XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL,
XmNokLabelString, yes,
XmNcancelLabelString, no,
XmNhelpLabelString,cancel_str,
NULL);
XtAddCallback(dialog,XmNokCallback, response, (XtPointer)&answer);
XtAddCallback(dialog,XmNcancelCallback, response,(XtPointer)&answer);
XtAddCallback(dialog,XmNhelpCallback, response,(XtPointer)&answer);
XmStringFree(yes);
XmStringFree(no); XmStringFree(cancel_str);
answer = 0;
text = XmStringCreateLtoR(question,XmSTRING_DEFAULT_CHARSET);
XtVaSetValues(dialog,
XmNmessageString, text,
NULL);
XmStringFree(text);
XtManageChild(dialog);
XtPopup(XtParent(dialog), XtGrabNone);
/* while the user hasn't provided an answer, simulate main loop.
the answer changes as soon as the user selects one of the buttons
and the callback routine changes its value.
*/
while(answer == 0)
XtAppProcessEvent(XtWidgetToApplicationContext(dialog), XtIMAll);
XtPopdown(XtParent(dialog));
return answer;
}
/*
response() -- The user made some sort of response to the question
posed in AskUser(). Set the answer (client_data)
accordingly and destroy the dialog.
*/
void
response(Widget widget, XtPointer client_data, XtPointer call_data)
{
int *answer = (int *)client_data;
XmAnyCallbackStruct *cbs = (XmAnyCallbackStruct *) call_data;
switch(cbs->reason) {
case XmCR_OK:
*answer = YES;
break;
case XmCR_CANCEL:
*answer = NO;
break;
case XmCR_HELP:
*answer = CANCEL;
break;
default:
return;
}
}
void
Export_HTML(
Widget w,
XtPointer client_data, XtPointer call_data)
{
HTMLED *he = (HTMLED *)client_data;
Widget dialog= he->export_dialog;
Widget menu_export;
int item_no = (int)he->user_data;
XmString str,title;
if(dialog) {
/* if(t)
XtVaSetValues(dialog,
XmNtextString,t,NULL);*/
XtManageChild(dialog);
/* make sure that dialog is raised to top of window stack*/
XMapRaised(XtDisplay(dialog),XtWindow(XtParent(dialog)));
return;
}
dialog = XmCreateFileSelectionDialog(he->textarea,"Files",NULL,0);
{
XmString label= XmStringCreateSimple("Format for exported document: ");
XmString Text = XmStringCreateSimple("Plain Text");
XmString Form_Text = XmStringCreateSimple("Formatted Text");
XmString PS_Times= XmStringCreateSimple("PostScript");
menu_export = XmVaCreateSimpleOptionMenu(dialog,"menu_export",
label,'\0',0,(XtCallbackProc)export_cb,
XmVaPUSHBUTTON,Text ,'T',NULL,NULL,
XmVaPUSHBUTTON,Form_Text ,'F',NULL,NULL,
XmVaPUSHBUTTON,PS_Times, 'm',NULL,NULL,
XmNuserData,he,
NULL);
XmStringFree(Text ); XmStringFree(PS_Times);
XmStringFree(Form_Text );
XtManageChild(menu_export);
}
XtAddCallback(dialog,XmNcancelCallback,(XtCallbackProc)XtUnmanageChild,NULL);
XtAddCallback(dialog,XmNokCallback,(XtCallbackProc)OkExportButtonCallback,(XtPointer)he);
if(item_no ==EXPORT_BUT)
{
str = XmStringCreateSimple("Export");
title = XmStringCreateSimple("Export HTML Document");
he->export_dialog = dialog;
}
XtVaSetValues(dialog,
XmNokLabelString,str,
XmNdialogTitle, title,
NULL);
XmStringFree(str);
XmStringFree(title);
XtManageChild(dialog);
}
void
export_cb(Widget w, XtPointer client_data, XtPointer call_data)
{
int item_no = (int)client_data;
Widget parent = XtParent(w);
HTMLED *he;
XtVaGetValues(parent,XmNuserData,&he,NULL);
he->export_option = item_no;
}
void
OkExportButtonCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
int fd;
HTMLED *he = (HTMLED *)client_data;
int len=0;
char *filename;
XmFileSelectionBoxCallbackStruct *selection =
(XmFileSelectionBoxCallbackStruct *) call_data;
/* Read the file and show it in the Text Window */
if(!XmStringGetLtoR(selection->value,XmSTRING_DEFAULT_CHARSET,&filename))
return; /* must have been an internal error */
if(!*filename)
{
/*XtFree(filename);*/
XBell(XtDisplay(he->textarea),50);
Set_label(he->text_output,"Choose a file.");
return; /* nothing typed */
}
XtFree(he->format_file);
he->format_file = filename;
if((fd = open(filename,O_RDONLY,0)) != -1)
{
len = strlen(filename);
he->warning = XtMalloc(len+50);
sprintf(he->warning,
"\"%s\" already exists\nDo you want to overwrite it?",filename);
warning_format_file(he->textarea,he);
}
else
{
save_format_file(he);
if(he->export_dialog)
XtUnmanageChild(he->export_dialog);
}
}
void
warning_format_file(Widget w,HTMLED *he)
{
static Widget dialog;
XmString text,ok_str,cancel_str;
char *msg = he->warning;
if(!dialog)
dialog = XmCreateWarningDialog(w,"warning",NULL,0);
text = XmStringCreateLtoR(msg,XmFONTLIST_DEFAULT_TAG);
ok_str = XmStringCreateLocalized("Yes");
cancel_str = XmStringCreateLocalized("No"); XtVaSetValues(dialog,
XmNmessageString,text,
XmNokLabelString,ok_str,
XmNcancelLabelString,cancel_str,
NULL);
XtAddCallback(dialog,XmNokCallback,(XtCallbackProc)ok_format_file,
(XtPointer)he);
XmStringFree(text);
XmStringFree(ok_str);
XmStringFree(cancel_str);
XtFree(he->warning);
XtManageChild(dialog);
XtPopup(XtParent(dialog),XtGrabNone);
}
void
ok_format_file(Widget w, XtPointer client_data,XtPointer call_data)
{
HTMLED *he = (HTMLED *)client_data;
save_format_file(he);
if(he->export_dialog)
XtUnmanageChild(he->export_dialog);
}
void
save_format_file(HTMLED *he)
{
char *text=NULL;
long int len;
int fd;
char buf[BUFSIZ];
char *filename = he->format_file;
if(!(he->format_file))
return;
buf[0]='\0';
printf("File to be saved is %s\n",he->format_file);
/* Create the file if it is a new file and write the
content of the Text Window to the file */
if((fd = creat(filename,PERMS)) == -1)
{
perror("Can not save this file \n");
sprintf(buf,"Can't save to %s.",filename);
Set_label(he->text_output,buf);
return ;
}
if(he->export_option==POSTSCRIPT)
text = HTMLGetText(he->html_text,he->export_option+he->fonts);
else
text = HTMLGetText(he->html_text,he->export_option);
/*len = strlen(text)+1;*/
len = strlen(text);
if(write(fd,text,len)!= len)
strcpy(buf,"Warning: did not write entire file!");
else
{
/* make sure a newline terminates file */
if(text[len-1]!='\n')
{
strcpy(buf,"\n");
++len; /* BKi */
write(fd,buf,1);
}
sprintf(buf,"saved %ld bytes to %s.",len, filename);
}
XtFree(text);
Set_label(he->text_output,buf);
close(fd);
XtFree(he->format_file);
he->format_file = NULL;
}
void
routines_fonts(Widget w, XtPointer client_data,XtPointer call_data)
{
int item_no=(int )client_data;
HTMLED *he;
Widget whtml;
Widget parent = XtParent(w);
XtVaGetValues(parent,XmNuserData,&he,NULL);
whtml = he->html_text;
switch(item_no)
{
case TREGULAR:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-times-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-times-medium-i-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-times-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-times-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-times-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-times-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-times-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-times-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-times-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-times-medium-i-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = TIMES;
break;
case TSMALL:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-times-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-times-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-times-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-times-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-times-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-times-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-times-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-times-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-times-bold-r-normal-*-8-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-times-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = TIMES;
break;
case TLARGE:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-times-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-times-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-times-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-times-bold-r-normal-*-25-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-times-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-times-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-times-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-times-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-times-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-times-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = TIMES;
break;
case HREGULAR:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-helvetica-medium-o-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-helvetica-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-helvetica-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-helvetica-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-helvetica-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-helvetica-medium-o-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = HELVETICA;
break;
case HSMALL:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-helvetica-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-helvetica-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-helvetica-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-helvetica-bold-r-normal-*-8-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-helvetica-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = HELVETICA;
break;
case HLARGE:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-helvetica-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-helvetica-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-helvetica-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-helvetica-bold-r-normal-*-25-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-helvetica-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-helvetica-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-helvetica-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-helvetica-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-helvetica-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = HELVETICA;
break;
case NCREGULAR:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-new century schoolbook-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-new century schoolbook-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = NEW_CENTURY;
break;
case NCSMALL:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-new century schoolbook-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-new century schoolbook-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-8-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = NEW_CENTURY;
break;
case NCLARGE:
XtVaSetValues(whtml,
XtNfont,
getFont("-adobe-new century schoolbook-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-adobe-new century schoolbook-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-adobe-courier-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-adobe-courier-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-25-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-adobe-new century schoolbook-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-adobe-new century schoolbook-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-adobe-courier-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-adobe-courier-bold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = NEW_CENTURY;
break;
case LREGULAR:
XtVaSetValues(whtml,
XtNfont,
getFont("-b&h-lucidabright-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-b&h-lucidabright-medium-i-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-b&h-lucidabright-demibold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-b&h-lucidatypewriter-bold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-24-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-b&h-lucidabright-medium-i-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-b&h-lucidatypewriter-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = LUCIDA_BRIGHT;
break;
case LSMALL:
XtVaSetValues(whtml,
XtNfont,
getFont("-b&h-lucidabright-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-b&h-lucidabright-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-b&h-lucidabright-demibold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-b&h-lucidatypewriter-bold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-11-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-10-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-b&h-lucidabright-medium-i-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-b&h-lucidatypewriter-bold-r-normal-*-12-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = LUCIDA_BRIGHT;
break;
case LLARGE:
XtVaSetValues(whtml,
XtNfont,
getFont("-b&h-lucidabright-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNitalicFont,
getFont("-b&h-lucidabright-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNboldFont,
getFont("-b&h-lucidabright-demibold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixedboldFont,
getFont("-b&h-lucidatypewriter-bold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNfixeditalicFont,
getFont("-adobe-courier-medium-o-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader1Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-25-*-*-*-*-*-*-*",whtml),
WbNheader2Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-25-*-*-*-*-*-*-*",whtml),
WbNheader3Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNheader4Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNheader5Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-17-*-*-*-*-*-*-*",whtml),
WbNheader6Font,
getFont("-b&h-lucidabright-demibold-r-normal-*-14-*-*-*-*-*-*-*",whtml),
WbNaddressFont,
getFont("-b&h-lucidabright-medium-i-normal-*-20-*-*-*-*-*-*-*",whtml),
WbNplainFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainboldFont,
getFont("-b&h-lucidatypewriter-medium-r-normal-*-18-*-*-*-*-*-*-*",whtml),
WbNplainitalicFont,
getFont("-adobe-courier-medium-o-normal-*-18-*-*-*-*-*-*-*",whtml),
NULL);
he->fonts = LUCIDA_BRIGHT;
break;
}
}
long getFont (char *name,Widget whtml)
{
XFontStruct *font = XLoadQueryFont (XtDisplay(whtml), name);
if (font == NULL)
{
fprintf (stderr, "Could not open font '%s'\n", name);
font = XLoadQueryFont (XtDisplay(whtml), "fixed");
}
return ((long)font);
}